// 二代身份证
export const validIDCard = /^[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|10|11|12)(?:0[1-9]|[1-2]\d|30|31)\d{3}[\dXx]$/
// email(支持中文邮箱)
export const validEmail = /^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/
// 正整数
export const validInteger = /^[1-9]\d*$/
// 手机号校验
export const validPhoneNumber = /^1[3-9]\d{9}$/
// 固话校验02588888888
export const validFixedLine = /^1[3-9]\d{9}$/
// 手机格式校验 或 固话校验02588888888
export const validPhoneAndFixedLine = /^1\d{10}$|^0\d{2,3}[1-9]\d{7}$/
// 密码
export const validPassword = /^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\W_!@#$%^&*`~()-+=]+$)(?![a-z0-9]+$)(?![a-z\W_!@#$%^&*`~()-+=]+$)(?![0-9\W_!@#$%^&*`~()-+=]+$)[a-zA-Z0-9\W_!@#$%^&*`~()-+=]{6,12}$/
// 两位小数(非必填）
export const validTwoDecimal = /^([1-9][0-9]*|[0-9])(\.\d{0,2})?$/
// 域名
/* eslint-disable no-useless-escape */
export const validDomain = /^(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?$/

export function validateIDCard (rule, value, callback) {
  if (value && !validIDCard.test(value)) {
    callback(new Error('身份证格式错误'))
  } else {
    callback()
  }
}

export function validateEmail (rule, value, callback) {
  if (value && !validEmail.test(value)) {
    callback(new Error('邮箱格式错误'))
  } else {
    callback()
  }
}

export function validateInteger (rule, value, callback) {
  if (value && !validInteger.test(value)) {
    callback(new Error('请输入正整数'))
  } else {
    callback()
  }
}

export function validatePhoneNumber (rule, value, callback) {
  if (value && !validPhoneNumber.test(value)) {
    callback(new Error('手机号格式错误'))
  } else {
    callback()
  }
}

export function validateFixedLine (rule, value, callback) {
  if (value && !validFixedLine.test(value)) {
    callback(new Error('请输入正确固话号码'))
  } else {
    callback()
  }
}

export function validatePhoneAndFixedLine (rule, value, callback) {
  if (value && !validPhoneAndFixedLine.test(value)) {
    callback(new Error('请输入正确号码'))
  } else {
    callback()
  }
}
export function validatelongitude (rule, value, callback) { // 校验经度
  // eslint-disable-next-line no-useless-escape
  const reg = /^(\-|\+)?(((\d|[1-9]\d|1[0-7]\d|0{1,3})\.\d{0,6})|(\d|[1-9]\d|1[0-7]\d|0{1,3})|180\.0{0,6}|180)$/
  if (value !== '' && value !== null && value !== undefined) {
    if (!reg.test(value)) {
      callback(new Error('经度整数部分为0-180,小数部分为0到6位!'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}
export function validatelatitude (rule, value, callback) { // 校验纬度
  // eslint-disable-next-line no-useless-escape
  const reg = /^(\-|\+)?([0-8]?\d{1}\.\d{0,6}|90\.0{0,6}|[0-8]?\d{1}|90)$/
  if (value !== '' && value !== null && value !== undefined) {
    if (!reg.test(value)) {
      callback(new Error('纬度整数部分为0-90,小数部分为0到6位!'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

// 密码校验(非必填)
export function password (rule, value, callback) {
  if (value && !validPassword.test(value)) {
    callback(new Error('请输入6-12位，必须包含数字、大小字母的三种及以上组合'))
  } else {
    callback()
  }
}

export function twoDecimal (rule, value, callback) {
  if (value && !validTwoDecimal.test(value)) {
    return callback(new Error('请输入两位以内的小数或正整数'))
  } else {
    return callback()
  }
}

// url
export function domain (rule, value, callback) {
  if (value && !validDomain.test(value)) {
    return callback(new Error('请输入正确的域名'))
  } else {
    return callback()
  }
}
